package com.cug.campus_sh_market_server.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cug.campus_sh_market_server.entity.param.OrderParam;
import com.cug.campus_sh_market_server.entity.param.PageParam;
import com.nycreativity.elecreativity.entity.vo.PageDataVO;

import java.io.Serializable;
import java.util.List;

/**
 * RestfullService 接口(对IService进行了扩展, 从而减少开发Restfull接口层删改查的重复性工作量)
 */
public interface IRestfullService
        <Entity, QueryParam, SaveParam, UpdateParam, VO>
        extends IService<Entity> {

    /**
     * 添加数据
     *
     * @param saveParam 添加入参
     * @return 添加结果
     */
    boolean saveData(SaveParam saveParam);

    /**
     * 保存并返回保存的数据
     *
     * @param saveParam 添加入参
     * @return 保存的数据
     */
    VO saveWithBackData(SaveParam saveParam);

    /**
     * 根据id删除数据
     *
     * @param id id
     * @return 删除结果
     */
    boolean removeData(Serializable id);

    /**
     * 修改数据
     *
     * @param updateParam 修改入参
     * @return 修改结果
     */
    boolean updateData(UpdateParam updateParam);

    /**
     * 根据条件查询数据列表
     *
     * @param param 条件参数
     * @return 数据列表
     */
    List<VO> queryData(QueryParam param);

    /**
     * 根据条件查询数据列表(带有分页)
     *
     * @param param     条件参数
     * @param pageParam 分页参数
     * @return 数据列表
     */
    PageDataVO<VO> queryDataByPage(QueryParam param, PageParam pageParam);

    /**
     * 根据条件查询数据列表(带排序)
     *
     * @param queryParam 条件参数
     * @param orderParam 排序参数
     * @return 数据列表
     */
    List<VO> queryData(QueryParam queryParam, OrderParam orderParam);

    /**
     * 根据条件查询数据列表(带有分页、带排序)
     *
     * @param queryParam 条件参数
     * @param pageParam  分页参数
     * @param orderParam 排序参数
     * @return 数据列表
     */
    PageDataVO<VO> queryDataByPage(QueryParam queryParam, PageParam pageParam, OrderParam orderParam);
}
